# -*- coding: utf-8 -*-
'''
Created on 20 de Abr de 2011

@author: Samuel
'''
import sqlite3
import matplotlib.pyplot as plt
import csv
import pylab as p
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3

class statistics():
    
    conn = sqlite3.connect('rebides.db')
    cursor = conn.cursor()             
                
    def teachersHigherEducation (self):
        listaDocente = []
        listaAno = []
        
        for ano in range(0,10):
            listaAno.append(ano)
            query = """SELECT COUNT (DISTINCT nomedocente) FROM graudocente WHERE ano = '{0}'""".format(ano)
            self.cursor.execute(query)
            listaDocente.append(self.cursor.fetchone()[0])
        
        
        w=csv.writer(file('TeachersHigherEducation.csv','wb'), delimiter=';' )
        for i in range(len(listaAno)):
            w.writerow([listaAno[i],listaDocente[i]])   
        self.graphic(listaAno, listaDocente, "Docentes", "Ano", "Total Teachers in Higher Education per Year")
        
            
    def teachersPerEstablishment (self):
        listaDocente = []
        listaEstabelecimento = []
        listaAno = []
        for ano in range(0,10):
            query = """SELECT nomeestabelecimento FROM estabelecimento """
            self.cursor.execute(query)
            estabelecimentos = self.cursor.fetchall()
            for row in estabelecimentos:
                
                print row[0].encode('utf-8')
                listaEstabelecimento.append(row[0].encode('utf-8'))
                queryDocente = """SELECT COUNT (DISTINCT nomedocente) FROM estabelecimentodocente WHERE ano = '{0}' and nomeestabelecimento = '{1}'""".format(ano,row[0].encode('utf-8'))
                self.cursor.execute(queryDocente)
                
                
                void = self.cursor.fetchone()[0]
                print void
                listaDocente.append(void)
                listaAno.append(ano)
        w=csv.writer(file('TeachersPerEstablishment.csv','wb'), delimiter=';' )
        for i in range(len(listaDocente)):
            w.writerow([listaAno[i], listaDocente[i],listaEstabelecimento[i]])     
        
        for ano in range(0,10):    
            self.listasMatplotlib(ano, listaAno, listaDocente, listaEstabelecimento , "Docentes" , "Estabelecimentos")
   
        
            
    def teachersPerInstitute (self):
        listaDocente = []
        tipoEstabelecimento = []
        listaAno = []
        for ano in range(0,10):
                        
            query = """SELECT tipoestabelecimento FROM tipo_estabelecimento """
            self.cursor.execute(query)
            tipoestabelecimentos = self.cursor.fetchall()
            for row in tipoestabelecimentos:
                
                queryDocente = """SELECT COUNT (DISTINCT nomedocente) FROM estabelecimentodocente WHERE ano = '{0}' and tipoestabelecimento = '{1}'""".format(ano,row[0].encode('utf-8'))
                self.cursor.execute(queryDocente)
                
                void = self.cursor.fetchone()[0]
                if (void != 0):
                    print row[0].encode('utf-8')
                    print void
                    tipoEstabelecimento.append(row[0].encode('utf-8'))
                    listaDocente.append(void)
                    listaAno.append(ano)
                else:
                    pass
        
        for ano in range(0,10):    
            self.listasMatplotlib(ano, listaAno, listaDocente, tipoEstabelecimento , "Docentes" , "Tipo Estabelecimento")
                      
            #self.graphic(listay, listax, y, x, "Teacher's per Institutions " )
                
        w=csv.writer(file('TeachersPerInstitute.csv','wb'), delimiter=';' )
       
        for i in range(len(listaAno)):
            w.writerow([listaAno[i], listaDocente[i],tipoEstabelecimento[i]])
        

        #self.teste(listaAno)
        
    def teachersPerDegree (self):
        listaDocente = []
        listaGraus = []
        listaAno = []
        for ano in range(0,10):
                        
            query = """SELECT grau FROM grau """
            self.cursor.execute(query)
            graus = self.cursor.fetchall()
            for row in graus:
                
                
                queryDocente = """SELECT COUNT (grau) FROM graudocente WHERE ano = '{0}' and grau = '{1}'""".format(ano, row[0].encode('utf-8'))
                self.cursor.execute(queryDocente)
                
                void = self.cursor.fetchone()[0]
                print void
                if (void != 0):
                    listaGraus.append(row[0].encode('utf-8'))
                    listaDocente.append(void)
                    listaAno.append(ano)
                else:
                    pass
        
        for ano in range(0,10):    
            self.listasMatplotlib(ano, listaAno, listaDocente, listaGraus , "Docentes" , "Grau")
         
        
        w=csv.writer(file('TeachersPerDegree.csv','wb'), delimiter=';' )
        for i in range(len(listaAno)):
            w.writerow([listaAno[i], listaDocente[i],graus[i]])
        
        
    def teachersPerDegreePerEstablishment (self):
        listaGrau = []
        qtgrau = []
        listaAno = []
        listaEstabelecimento = []
        for ano in range(0,1):
                        
            query = """SELECT nomeestabelecimento FROM estabelecimento """
            self.cursor.execute(query)
            
            estabelecimento = self.cursor.fetchall()
            for row in estabelecimento:
            
                print row[0].encode('utf-8')
                
                querygrau = """SELECT grau FROM grau """
            
                self.cursor.execute(querygrau)
                graus = self.cursor.fetchall()
                for x in graus:
                    
                    queryFinal = """SELECT Count (grau) FROM graudocente WHERE ano = '{0}' and nomeestabelecimento = '{1}' and grau = '{2}'""".format(ano, row[0].encode('utf-8'), x[0].encode('utf-8'))
                    self.cursor.execute(queryFinal)
                    total=self.cursor.fetchone()[0]
                    if(total != 0):
                        listaAno.append(ano)
                        listaEstabelecimento.append(row[0].encode('utf-8'))
                        listaGrau.append(x)
                        qtgrau.append(total)
                        print x[0].encode('utf-8')
                        print total
                    else:
                        pass

        w=csv.writer(file('teachersPerDegreePerEstablishment.csv','wb'), delimiter=';' )
        for i in range(len(listaAno)):
            w.writerow([listaAno[i], estabelecimento[i] ,listaGrau[i],qtgrau[i]])                     
        self.teste(listaAno, listaGrau, estabelecimento)
    
    
    def teste(self, listaAno, listaGrau, estabelecimento):
        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        for c, z in zip(['r', 'g', 'b', 'y'], listaAno):
            xs = listaGrau
            ys = estabelecimento
            cs = [c] * len(xs)
            cs[0] = 'c'
            ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8)
    
        ax.set_xlabel('Lista de Graus')
        ax.set_ylabel('Total de Professores com grau')
        ax.set_zlabel('Total de Professores com grau por estabelecimento')

        plt.show()
       
    def graphic(self, listay, listax, y, x, title):

        plt.plot(listay, listax, 'ro')
        
        plt.ylabel(y)
        plt.xlabel(x)
        plt.title(title)
       
        plt.show() 
    
    def listasMatplotlib(self, ano, listaAno, listax, listay , ytitle , xtitle):
        segundaLista = []
        terceiraLista = []
        for i in range(len(listaAno)):
            if listaAno[i] == ano:
                segundaLista.append(listax[i]) 
                terceiraLista.append(1)
            pass
        self.graphic(segundaLista, terceiraLista, ytitle, xtitle, "Ano 200{0}".format(ano))     